package cn.vconinfo.app.utils;

import cn.vconinfo.base.utils.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * @author vconinfo
 * @createdOn 2019/11/15
 * @description: 文件工具类
 */
public class MessageUtil {

    private static Logger log = LoggerFactory.getLogger(MessageUtil.class);
    public static final Map<String, String> GLOBAL_MESSAGE_MAP = new HashMap<String, String>();

    private MessageUtil() {
    }

    /**
     * 根据消息ID获取消息内容 （全局静态map中获取）
     * 
     * @param messageId
     * @param arguments
     * @return
     */
    public static String getMessage(String messageId, Object... arguments) {
        FileInputStream iFile = null;
        try {
            String message;
            if (GLOBAL_MESSAGE_MAP.size() != 0) {
                message = GLOBAL_MESSAGE_MAP.get(messageId);
            } else {
                // 如果初期没有取得消息，则从文件中读取
                Properties props = new Properties();
                iFile = new FileInputStream("D:\\file\\message\\message.properties");
                props.load(iFile);
                message = props.getProperty(messageId);
            }
            if (message == null) {
                log.error("不存在该消息ID:" + messageId);
                return "";
            }
            for (int i = 0; i < arguments.length; i++) {
                String argument = "";
                if (arguments[i] != null) {
                    argument = arguments[i].toString();
                }
                message = StringUtil.replaceOnce(message, "{}", argument);
            }
            message = message.replaceAll("\\{\\}", "");
            return message;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        } finally {
            try {
                if (iFile != null) {
                    iFile.close();
                }
            } catch (Exception e) {
            }
        }
    }

    /**
     * 新增成功消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getInsertNormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10001", arguments[0], ", ID=" + arguments[1]);
        } else {
            return getMessage("COM_I_10001", arguments[0], "");
        }
    }

    /**
     * 新增失败消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getInsertAbnormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10002", arguments[0], arguments[1]);
        } else {
            return getMessage("COM_I_10002", arguments[0], "");
        }
    }

    /**
     * 更新成功消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getUpdateNormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10003", arguments[0], ", ID=" + arguments[1]);
        } else {
            return getMessage("COM_I_10003", arguments[0], "");
        }
    }

    /**
     * 更新失败消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getUpdateAbnormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10004", arguments[0], ", ID=" + arguments[1]);
        } else {
            return getMessage("COM_I_10004", arguments[0], "");
        }
    }

    /**
     * 逻辑删除成功消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getRemoveNormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10005", arguments[0], ", ID=" + arguments[1]);
        } else {
            return getMessage("COM_I_10005", arguments[0], "");
        }
    }

    /**
     * 逻辑删除失败消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getRemoveAbnormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10006", arguments[0], ", ID=" + arguments[1]);
        } else {
            return getMessage("COM_I_10006", arguments[0], "");
        }
    }

    /**
     * 物理删除成功消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getDeleteNormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10007", arguments[0], ", ID=" + arguments[1]);
        } else {
            return getMessage("COM_I_10007", arguments[0], "");
        }
    }

    /**
     * 物理删除失败消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getDeleteAbnormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10008", arguments[0], ", ID=" + arguments[1]);
        } else {
            return getMessage("COM_I_10008", arguments[0], "");
        }
    }

    /**
     * 列表取得成功消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getListNormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10009", arguments);
        } else {
            return getMessage("COM_I_10009", arguments[0], "");
        }
    }

    /**
     * 列表取得失败消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getListAbnormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10010", arguments);
        } else {
            return getMessage("COM_I_10010", arguments[0], "");
        }
    }

    /**
     * 详情取得成功消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getDetailNormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10011", arguments[0], ", ID=" + arguments[1]);
        } else {
            return getMessage("COM_I_10011", arguments[0], "");
        }
    }

    /**
     * 详情取得失败消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getDetailAbnormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10012", arguments[0], ", ID=" + arguments[1]);
        } else {
            return getMessage("COM_I_10012", arguments[0], "");
        }
    }

    /**
     * 指定条件取得成功消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getConditionNormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10013", arguments);
        } else {
            return getMessage("COM_I_10013", arguments[0], "");
        }
    }

    /**
     * 指定条件取得失败消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getConditionAbnormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10014", arguments);
        } else {
            return getMessage("COM_I_10014", arguments[0], "");
        }
    }

    /**
     * 打印成功消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getPrintNormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10021", arguments[0], ", ID=" + arguments[1]);
        } else {
            return getMessage("COM_I_10021", arguments[0], "");
        }
    }

    /**
     * 打印失败消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getPrintAbnormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10022", arguments[0], ", ID=" + arguments[1]);
        } else {
            return getMessage("COM_I_10022", arguments[0], "");
        }
    }
    /**
     * 打印成功消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getDownloadNormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10023", arguments[0], ", ID=" + arguments[1]);
        } else {
            return getMessage("COM_I_10023", arguments[0], "");
        }
    }

    /**
     * 打印失败消息设定
     *
     * @param arguments
     * @return message
     */
    public static String getDownloadAbnormalMsg(Object... arguments) {
        if (arguments.length > 1) {
            return getMessage("COM_I_10024", arguments[0], ", ID=" + arguments[1]);
        } else {
            return getMessage("COM_I_10024", arguments[0], "");
        }
    }

    public static void main(String[] args) {
        log.info(getMessage("COM_W_10001"));
        log.info(getMessage("COM_I_10005", "经销商表"));
        log.info(getMessage("COM_I_10005", "经销商表", "经销商表2", "经销商表3"));
        log.info(getUpdateAbnormalMsg("经销商"));
        log.info(getUpdateAbnormalMsg("经销商", 12));
    }
}
